﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
using System.Net.Security;
using System.ServiceModel.Description;
using System.Security.Permissions;
using System.Security.Cryptography.X509Certificates;
using System.Collections;



namespace ChatContrats
{
    /// <summary>
    /// Contrat de rappel que le client devra implémenter pour être rappelé par le serveur
    /// </summary>
    public interface IChatWCFRappel
    {

        /// <summary>
        /// Informe le client qu'un nouvel utilisateur s'est connecté
        /// </summary>
        /// <param name="pseudo">pseudo de l'utilisateur qui s'est connecté</param>
        [OperationContract(IsOneWay = true, ProtectionLevel = ProtectionLevel.None)]
        void ConnexionUtilisateur(String pseudo);

         [OperationContract(IsOneWay = true, ProtectionLevel = ProtectionLevel.None)]
        void UtilisateurExistant(String pseudo);

         [OperationContract(IsOneWay = true, ProtectionLevel = ProtectionLevel.None)]
         void nouvelUtilisateurListe(String utilisateur);

         [OperationContract(IsOneWay = true, ProtectionLevel = ProtectionLevel.None)]
         void deconnexionUtilisateurListe(String utilisateur);


        /// <summary>
        /// Informe le client qu'un utilisateur s'est déconnecté
        /// </summary>
        /// <param name="pseudo">pseudo de l'utilisateur qui s'est déconnecté</param>
        [OperationContract(IsOneWay = true, ProtectionLevel = ProtectionLevel.None)]
        void DeconnexionUtilisateur(String pseudo);

        [OperationContract(IsOneWay = true, ProtectionLevel = ProtectionLevel.None)]
        void giveListeUtilisateur(Hashtable utilisateurs);
        [OperationContract(IsOneWay = true, ProtectionLevel = ProtectionLevel.None)]
        void newPrivateMessage(String destinataire, String message);

        /// <summary>
        /// Reception par le client d'un message
        /// </summary>
        /// <param name="message">le message reçu</param>
        [OperationContract(IsOneWay = true, ProtectionLevel = ProtectionLevel.None)]
        void ReceptionMessage(String pseudo, String message);

        /// <summary>
        /// Reception par le client d'un message d'erreur
        /// </summary>
        /// <param name="erreur">l'erreur reçu</param>
        [OperationContract(IsOneWay = true, ProtectionLevel = ProtectionLevel.None)]
        void ReceptionErreur(String erreur);
    }
}
